package cn.edu.swu.miniwebsvr.core;

import cn.edu.swu.miniwebsvr.handler.DefaultHandler;
import cn.edu.swu.miniwebsvr.handler.EchoHandler;
import cn.edu.swu.miniwebsvr.handler.TimeHandler;
import java.util.HashMap;
import java.util.Map;

public class Config {
    private final int port = 8080;// 服务器监听端口
    private final String webRoot = "webroot";// 静态资源根目录路径
    private final Map<String, Handler> handlerMap = new HashMap<>();// URL与处理器的映射关系

    // 私有构造函数，初始化默认处理器映射
    private Config() {
        handlerMap.put("/", (Handler) new DefaultHandler());// 默认处理器，处理根路径
        handlerMap.put("/time", (Handler) new TimeHandler()); // 时间处理器，处理/time路径
        handlerMap.put("/echo", (Handler) new EchoHandler());// 回声处理器，处理/echo路径
    }

    // 单例模式：获取Config实例
    public static Config getInstance() {
        return Holder.INSTANCE;
    }

    // 静态内部类实现单例（线程安全且延迟加载）
    private static class Holder {
        private static final Config INSTANCE = new Config();
    }

    // 获取端口号
    public int getPort() {
        return port;
    }

    // 获取静态资源根目录
    public String getWebRoot() {
        return webRoot;
    }

    // 根据URL获取对应的处理器
    public Handler getHandler(String url) {
        // TODO: [222024321072057/王文薏] 实现 URL 精确匹配或基础路径匹配逻辑
        // 1. 优先精确匹配
        Handler exactHandler = handlerMap.get(url);
        if (exactHandler != null) {
            return exactHandler;
        }

        // 2. 精确匹配失败，尝试基础路径匹配（最长前缀匹配）
        String currentPath = url;
        // 从完整URL开始，逐步截取父路径尝试匹配
        while (true) {
            // 截取最后一个"/"之前的路径（如"/user/123" -> "/user"）
            int lastSlashIndex = currentPath.lastIndexOf('/');
            // 如果已经是根路径，退出循环
            if (lastSlashIndex <= 0) {
                break;
            }
            currentPath = currentPath.substring(0, lastSlashIndex);
            // 检查是否有对应的处理器
            Handler baseHandler = handlerMap.get(currentPath);
            if (baseHandler != null) {
                return baseHandler;
            }
        }

        return null;
    }
}
